perm filename FILLER.F4[MSS,LCS]5 blob
sn#122697 filedate 1974-10-01 generic text, type T, neo UTF8
00200 ****** FILLER, HGHT, MISS, HALF ********
00400 C Q AND R ARE X,Y COORDS. NE(1)=WDCNT. OTHER NE'S HAVE 3
00600 C FOR INVIS. VECTORS. M=VERTICAL SCAN LINES
00800 SUBROUTINE FILLER(Q,R,NE,M)
01000 DIMENSION Q(1),R(1),NE(1)
01200 KK=NE(1)
01400 CC LA=0
01600 KJ=2
01800 DO 4 K=2,KK
02000 IF(NE(K).NE.3)GO TO 11
02200 CCCC NE(K)=KJ
02400 NE(K)=-1
02600 KJ=K+1
02800 GO TO 4
03000 11 NE(K)=0
03200 4 CONTINUE
03400 RLFT=1000
03600 RT=-1000
03800 B=RT
04000 DO 12 K=1,KK
04200 H=IFIX(Q(K))
04400 IF(H.LT.RLFT)RLFT=H
04600 C FINDS LEFT AND RIGHT LIMITS.
04800 IF(H.GT.RT)RT=H
05010 IF(H.EQ.B)NE(K)=-1
05200 C FINDS VERTICAL LINES.
05400 B=H
05600 Q(K)=H
05800 12 R(K)=IFIX(R(K))
06000 CCCC NE(KK+1)=KJ
06200 NE(KK+1)=-1
06400 C FINDS JUMPS
06600 LEFT=RLFT
06800 LRT=RT
07000 JA=3
07200 123 DO 41 K=2,KK
07400 41 IF(NE(K).EQ.0)GO TO 51
07600 RETURN
07800 C NO MORE LINES TO LOOK AT.
08000
08200 51 J=LEFT
08800 42 RJ=J+.001
08900 JCONT=0
08910 CC JN=J
08955 LEFT=J
09000
10800 C NEXT LOOKS TO SEE IF 'ALT' IS HIGHEST AVAILABLE POINT.
11000 JJ=-1
11200 ALT=-1000.
11400 200 DO 45 L=2,KK
11600 IF(NE(L).NE.0)GO TO 45
11800 C PASSES ANY LINE THAT HAS BEEN USED FOR ↑ OR ↓ SO FAR.
12000 C NE=-1 ↓; =1 ↑;
12200 IF(MISS(L,RJ,Q))GO TO 45
12400 C FINDS HIGHEST UNUSED LINE UNDER J
12600 H=HGHT(L,RJ,Q,R)
12800 IF(H.LT.ALT)GO TO 45
13000 ALT=H
13200 JJ=L
13400 45 CONTINUE
13500 IF(JJ)GO TO 43
13600 C DID NOT FIND A NEW LINE TO USE.
13610 JCONT=-1
13620 LEFT=J
13700
15500 46 JA=3
15600 52 KN=Q(JJ)
15800 KL=Q(JJ-1)
16000 IF(KN.LT.KL)KN=KL
16800 50 DO 49 I=J,KN,M
17000 RJ=I+.001
17200 IF(I.EQ.KN)RJ=RJ-.002
17300 ALT=HGHT(JJ,RJ,Q,R)
17600 CC LA=K
17800 C NEXT FINDS HIGHEST POINT TO DRAW TO.
18000 B=-1000
18200 JK=-1
18300 XALT=ALT+.001
18400 400 DO 47 L=2,KK
18600 IF(L.EQ.JJ.OR.MISS(L,RJ,Q).OR.NE(L).LT.0)GO TO 47
18800 H=HGHT(L,RJ,Q,R)
19000 IF(H.GT.XALT)GO TO 47
19200 IF(H.LE.B)GO TO 47
19300 B=H
19400 C FINDS HIGHEST POINT.
19600 JK=L
19800 47 CONTINUE
20000 IF(JK)GO TO 48
20010 NE(JJ)=-1
20020 300 IF(ALT-B.GT..00001)GO TO 59
20022 C SKIPS POINTS TOO CLOSE TOGETHER. WIPES OUT BOTH LINES.
20030 NE(JK)=-1
20035 GO TO 48
20040 59 CALL LINES(RJ,ALT,JA)
20200 100 CALL LINES(RJ,B,2)
20400 NE(JK)=1
20600 CALL DPYOUT(1)
20700 JA=2
20710 49 CONTINUE
20810 L=1
20820 IF(KN.EQ.KL)L=-1
20960 JJ=JJ+L
20965 J=0
20969 IF(L)J=-1
20971 C FIGURES OUT DIRECTION OF NEXT LINE SEG.
20973 IF(KN+M.GT.Q(JJ+J).OR.JJ.GT.KK.OR.NE(JJ).NE.0)GO TO 43
20986 J=I+M
21000 GO TO 52
21200 48 JA=3
21600 43 J=LEFT+M
21800 C M IS SET IN FILLMS
22000 IF(J.LE.LRT)GO TO 42
22020 IF(JCONT)GO TO 51
22200 END
22400
22600 FUNCTION HGHT(J,A,Q,R)
22800 DIMENSION Q(1),R(1)
23000 B=R(J-1)
23200 D=Q(J-1)
23400 F=Q(J)
23600 HGHT=((R(J)-B)*(A-D))/(F-D)+B
23800 IF(F.EQ.D)HGHT=B
24000 END
24200
24400 FUNCTION MISS(J,A,Q)
24600 DIMENSION Q(1)
24800 B=Q(J)
25000 C=Q(J-1)
25200 MISS=-1
25400 IF((A.LT.C.AND.A.GT.B).OR.(A.LT.B.AND.A.GT.C))MISS=0
25600 END
25800 C MISS=-1, HIT=0